home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Just Call Me Internet
/
Just Call Me Internet.iso
/
prog
/
atari
/
m2
/
cat3src
/
cat
/
groupsel.d
< prev
next >
Wrap
Text File
|
1997-10-26
|
11KB
|
272 lines
(* Konzept fr neue Gruppenauswahl und neue interne Gruppenverwaltung
*
* Es gibt ein Modul, das eine Gruppenliste verwaltet. Diese Gruppenliste
* wird aus einer eigenen Datei aufgebaut, die von CAT erstellt wird.
* Die Datei beinhaltet folgendes:
*
* Lokalen Gruppennamen
* Netzgruppennamen
* Chef der Gruppe
* Beschreibung der Gruppe
* Follow-Up to (erst ab Maus 9 im ITG)
* Sysop-Info fr die Gruppe
* Status der Gruppe (aus ITG)
* Lesereihenfolge (diese Gruppe an x-ter Stelle zu lesen)
* interne Gruppennummer
*
* Diese Datei wird von CAT aus dem ITG und der Gruppen.INF erstellt.
* Wenn die Datei nicht existiert, dann wird sie neu erstellt, wobei dann
* die Lesereihenfolge nicht festgelegt ist.
* Wenn ein ITG neu kommt, dann wird die Datei mit der neuen ITG abgeglichen
* und ggf. korrigiert. Ebenso, wenn neue Gruppen angelegt werden.
*
* Das Modul, da diese Liste verwaltet, stellt Routinen zur Verfgung, um
* auf der Liste zu arbeiten und Teillisten fr verschiedene Funktionen
* zur Verfgung zu haben. Es stellt mindestens folgende Listen zur Verfgung:
*
* Komplette Gruppenliste fr Gruppenauswahl beim An-/Abstellen
* Gruppenliste der in CAT vorhandenen Gruppen
* Gruppenliste mit Chefstatus
* Gruppenliste mit allen Gruppen mit Schreiberlaubnis (fr neue Nachrichten)
*
* Datenkonsistenz:
*
* Die Datei mu immer dann bearbeitet werden, wenn eine neue Gruppe in CAT
* ankommt, ein neues ITG (oder IGK!) kommt oder die Lesereihenfolge gendert
* wird. Es ist darauf zu achten, da auch CatPutz diese Datei beim Lschen
* einer Gruppe mit pflegt.
*
* Damit die Gruppenliste nur in diesem Modul verwaltet wird, mssen Funktionen
* fr alle mglichen Operationen vorhanden sein, auch zum Lschen von Eintrgen.
* Auch das Umbenennen von Gruppen sollte mglich sein. Auch die Datei GRUPPEN.INF
* sollte danach nur noch von diesem Modul behandelt werden. Sollte keine ITG
* von der Box kommen, so mu das Modul auch mit der Datei IGK arbeiten knnen,
* allerdings nur eingeschrnkt.
*
* Definitiv durch dieses Modul beeinflut wird data, da dort bis jetzt die
* Gruppenliste verwaltet wurde. Ebenfalls gendert werden mu das Modul
* GruppenAuswahl, da diese natrlich die Informationen aus dem ITG untersttzen
* soll.
*
* Ggf. weitere Anforderungen stellen sich dann whrend der Implementation
* heraus.
*)
DEFINITION MODULE GroupSelect;
(* Aus Platzgrnden werden bei den Namen nur Pointer gespeichert und ein
* Block alloziert, der alle Namen enthlt.
*)
FROM SYSTEM IMPORT ADDRESS;
IMPORT Lists;
FROM CatTypes IMPORT Str255Ptr;
TYPE
selSortType = (sName, sNet, sLang);
rwState = (rwNA, rwOn, rwPossible, rwAskChef, rwAskSysop, rwImpossible, rwDefault, rwNoPermission);
uState = (uNA, uIsChef, uIsUser, uNoUser);
netState = (nNA, nNet, nLokal, nNetLokal, nNetForbid);
orderState = (oNA, oOn, oOff);
group = RECORD
name : Str255Ptr; (* G-Zeile *)
netname : Str255Ptr; (* N-Zeile *)
chef : Str255Ptr; (* C-Zeile *)
kurztext : Str255Ptr; (* :-Zeile *)
sysop : Str255Ptr; (* S-Zeile *)
followup : Str255Ptr; (* R-Zeile *)
herkunft : Str255Ptr; (* H-Zeile *)
sprache : Str255Ptr; (* P-Zeile *)
alias : Str255Ptr; (* A-Zeile *)
readNumber: INTEGER;
catNumber : INTEGER;
readState : rwState; (* F-Zeile *)
writeState: rwState; (* F-Zeile *)
userState : uState; (* F-Zeile *)
isNet : netState; (* F-Zeile *)
hasProg : BOOLEAN; (* F-Zeile *)
withDollar: BOOLEAN; (* F-Zeile *)
selected : BOOLEAN; (* Fr Darstellung in Liste *)
ordered : orderState; (* Fr An-/Abbestellen von Gruppen *)
orderDays : INTEGER; (* Madness-Erweiterung: Gruppe soviel Tage zurck bestellen *)
isUpdated : BOOLEAN; (* Eintrag wurde aktualisiert, nur fr ITG *)
dataLength: CARDINAL; (* Die Lnge des folgenden Datenblocks *)
data : ADDRESS; (* Block mit Daten fr Pointer oben *)
END;
groupPtr = POINTER TO group;
PROCEDURE ParseInfofile (): BOOLEAN;
(* Parst die ITG bzw. IGK (wenn ITG nicht da) und updatet die Gruppenliste
*)
PROCEDURE ParseRenamefile ();
(* Parst die Datei REN.TXT, die Gruppenumbenennungsinformationen von
* der MAUS enthlt. Wird aufgerufen, wenn der Block #REN im Outfile kommt.
*)
PROCEDURE SaveGroupList(): BOOLEAN;
(* Sichert die interne Gruppenliste in die Datei CATGROUP.INF
*)
PROCEDURE SaveChangedGroupList(): BOOLEAN;
(* Sichert die interne Gruppenliste in die Datei CATGROUP.INF,
* wenn sie seit dem letzten Einlesen irgendwie gendert wurde
*)
PROCEDURE ReadGroupList(): BOOLEAN;
(* Liest die interne Gruppenliste, gibt Fehlercode zurck, falls nicht
* mglich. Falls die Liste nicht gelesen werden kann, muss CAT terminieren!
*)
(* Hier kommen jetzt Funktionen, die einzelne Listen oder Teillisten
* den anderen Modulen zur Verfgung stellen.
*)
PROCEDURE GetReadList (VAR list : Lists.List; byReadNum: BOOLEAN; getNew, getUnread: BOOLEAN): BOOLEAN;
(* Diese Prozedur liefert eine Liste der Gruppen, die in CAT vorhanden
* und damit lesbar sind. Die Gruppe 'PERSNLICHE' ist mit enthalten.
* Die Liste ist nach der Lesereihenfolge sortiert, die Gruppe 'PERSNLICHE'
* ist immer als erste Gruppe vorhanden (die Lesenummer davon kann nicht
* gendert werden).
* FALSE: Liste konnte nicht erzeugt werden
*)
PROCEDURE UpdateReadList (list: Lists.List): BOOLEAN;
(* Hiermit wird das Modul aufgefordert, die Lesereihenfolge zu ndern.
* Es mu als Parameter eine Liste bergeben werden, die eine genderte
* Lesereihenfolge hat und die ber GetReadList angefordert wurde.
* FALSE: Interne Liste konnte nicht upgedatet werden
*)
PROCEDURE GetUserList (VAR list: Lists.List): BOOLEAN;
(* Diese Prozedur liefert eine Liste der Gruppen, in denen man Chef ist.
* Diese wird bentigt, um User in andere Gruppen einzutragen.
* FALSE: Liste konnte nicht erzeugt werden
*)
PROCEDURE GetWriteList (VAR list: Lists.List; full: BOOLEAN): BOOLEAN;
(* Diese Prozedur liefert eine Liste der Gruppen, in denen man schreiben
* kann. Diese Liste wird dann benutzt, wenn man eine neue Nachricht in
* eine Gruppe schreiben will.
* FALSE: Liste konnte nicht erzeugt werden
*)
PROCEDURE GetSelectList (VAR list: Lists.List; lokal: BOOLEAN;
sortBy: selSortType): BOOLEAN;
(* Diese Prozedur liefert eine Liste der Gruppen, die in der Maus vorhanden
* sind bzw. alle Gruppen aus dem ITG. Benutzt wird diese Liste fr die
* Gruppenauswahl.
* lokal: Es werden nur die lokal vorhandenen Gruppen geliefert
* FALSE: Liste konnte nicht erzeugt werden
*)
PROCEDURE UpdateSelectList (list: Lists.List; resort: BOOLEAN): BOOLEAN;
(* Hiermit wird das Modul aufgefordert, sich zu merken, welche Gruppen
* beim nchsten Tausch bestellt oder abbestellt werden sollen.
* Es mu als Parameter eine Liste bergeben werden,
* die ber GetSelectList angefordert wurde
* FALSE: Interne Liste konnte nicht upgedatet werden
*)
PROCEDURE DeleteList (VAR list: Lists.List);
(* Lscht eine Liste vollstndig, also auch die Wurzel davon. Danach darf
* nicht mehr auf die Liste zugegriffen werden.
*)
PROCEDURE NameToFile (REF name : ARRAY OF CHAR;
REF path, fname : ARRAY OF CHAR):BOOLEAN;
(* Schreibt den Namen 'name' an das Ende des Files 'path\fname'
*)
PROCEDURE RenameGroup (REF oldName, newName : ARRAY OF CHAR; extern: BOOLEAN): BOOLEAN;
(* Benennt eine Gruppe um. Die GRUPPEN.INF wird danach direkt neu
* geschrieben, die nderungen in den anderen Daten werden
* am Programmende gesichert
*)
PROCEDURE AppendGroup(VAR group : ARRAY OF CHAR):BOOLEAN;
(* Neuen Gruppennamen bernehmen, meckert selber, falls es nicht klappt *)
PROCEDURE GroupNumber(REF gName : ARRAY OF CHAR; VAR nr : CARDINAL):BOOLEAN;
(* Gruppennummer zu einem String feststellen *)
(* Wenn FALSE, dann kommt Gruppenanzahl in nr zurck, Anzahl *)
(* inklusive persnliche *)
PROCEDURE CountCatGroups(): CARDINAL;
(* Liefert die Zahl der Gruppen in CAT zurck, inklusive der persnlichen Gruppe
*)
PROCEDURE NextGroupNumber(old : CARDINAL):CARDINAL;
(* Nummer der nchsten Gruppe in der Reihenfolge der momentanen Sortierung *)
(* feststellen; 0FFFF = empty falls keine weiter Gruppe vorhanden ist *)
PROCEDURE PreviousGroupNumber (old : CARDINAL):CARDINAL;
(* Nummer der vorhergehenden Gruppe in der Reihenfolge der momentanen Sortierung *)
(* feststellen; 0FFFF = empty falls keine weiter Gruppe vorhanden ist *)
PROCEDURE NetGroupNumber(REF gName : ARRAY OF CHAR; VAR nr : CARDINAL):BOOLEAN;
(* Gruppennummer zu einem String mit einem Netzgruppennamen feststellen *)
(* Wenn FALSE, dann kommt Gruppenanzahl in nr zurck, Anzahl *)
(* inklusive persnliche *)
PROCEDURE GroupName(nr : CARDINAL; VAR name : ARRAY OF CHAR);
(* Gruppenname zu einer Nummer feststellen, liefert im Fehlerfall *)
(* keinen Eintrag sondern leeren Namen *)
(* Fr die Gruppennderungen, die an die Maus geschickt werden *)
TYPE gcMode = (GFIRST, GNEXT);
PROCEDURE GetGroupChange (VAR str : ARRAY OF CHAR; mode: gcMode): BOOLEAN;
(* Liefert bei TRUE in str einen String mit +gname oder -gname,
* je nachdem, ob eine Gruppe angestellt oder abgestellt werden soll
*)
PROCEDURE ClearGroupChange (VAR name : ARRAY OF CHAR);
(* Lscht eine Gruppennderung fr die Gruppe name
*)
PROCEDURE SetFollowUp (gr : groupPtr; REF name : ARRAY OF CHAR);
(* Setzt das Follow-Up fr die Gruppe group
*)
PROCEDURE GetFollowUp (REF gName: ARRAY OF CHAR; VAR followupTo : ARRAY OF CHAR): BOOLEAN;
(* Setzt das Follow-Up fr die Gruppe group
*)
PROCEDURE GetNetName (VAR name: ARRAY OF CHAR);
(* Liefert zu einer Gruppe den Netzgruppennamen
*)
PROCEDURE GetWriteAccess (REF name: ARRAY OF CHAR): BOOLEAN;
(* Liefert TRUE zurck, falls die Gruppe existiert und der
* Benutzer laut ITG schreiben darf
*)
(* Funktionen fr CatPutz: *)
PROCEDURE DeleteGroup (REF gName: ARRAY OF CHAR);
(* Lscht die Gruppe aus der Liste der in CAT verfgbaren Gruppen und
* pat die Lesenummern an. Die Filenummern fr die Datenbank
* mssen anders angepat werden (z.B. mit SetNewCatNumber).
* Ebenso mu das Gruppen.Pos extern angepat werden.
*)
PROCEDURE SetNewCatNumber (REF gName: ARRAY OF CHAR; newNumber: INTEGER);
(* Setzt eine neue Gruppennummer fr eine Gruppe.
* Das GRUPPEN.INF wird danach neu geschrieben
*)
PROCEDURE SaveGruppenInf ();
(* Sichert die Liste der Gruppen komplett
*)
END GroupSelect.